home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 September / PCWorld_2006-09_cd.bin / v cisle / hexer / mpth_17.exe / {app} / scripts / Structure Viewer / bmp.mps next >
Text File  |  2006-03-19  |  4KB  |  163 lines

  1. option title, "Windows bitmap (.bmp) structure"
  2. =
  3. =
  4. =    Tiny Hexer script for .BMP structure view in
  5. =    mirkes.de's tiny hex editor
  6. =
  7. =    (C) markus stephany, tinyhexer[at]mirkes[dot]de
  8. =
  9.  
  10.  
  11. option GlobalVars, 1
  12. option ReadTags, 1
  13. option target, structureviewer
  14.  
  15. = open active editor and goto current position/0
  16. var editor file
  17. editor = fileopen('::current')
  18. if ((param_count > 0) and (dword(params(0))==1))
  19.   fileseek editor, 0
  20. else
  21.   fileseek editor, filegetprop(editor, 'selstart')
  22. endif
  23. var start dword
  24. start = filegetprop(editor, 'position')
  25.  
  26. = open browser window
  27. var browser file
  28. browser = fileopen('::browser', 'c')
  29.  
  30. filesetprop browser, 'accepttags', 1
  31. filewrite browser "<font color=",'"',"blue",'"',"><b><u>Bitmap Graphic structure:</u></b></font>\n\n"
  32. filesetprop browser, 'accepttags', 0
  33.  
  34. filewrite browser "File: '",filegetprop(editor, 'filename'),"'\nPosition: ",start,"\n\n"
  35.  
  36.  
  37. = read the BMP header
  38. var _word word _dword dword _text text
  39. fileread editor _word
  40.  
  41. if  _word != 0x4d42
  42.   error 'Unknown file format'
  43. endif
  44.  
  45.  
  46. = print file header
  47. filewrite browser "struct tagBITMAPFILEHEADER {\n"
  48. _text = data2text(_word)
  49. copytags _text _word
  50. filewrite browser "  WORD   bfType\t'",_text,"'\t\t(",_word,");\n"
  51. fileread editor _dword
  52. filewrite browser "  DWORD  bfSize\t",_dword,";\n"
  53. fileread editor _word
  54. filewrite browser "  WORD   bfReserved1\t",_word,";\n"
  55. fileread editor _word
  56. filewrite browser "  WORD   bfReserved2\t",_word,";\n"
  57.  
  58. fileread editor _dword
  59. _text = 'bfOffbits': tagvar _text, _dword, 0
  60. filewrite browser "  DWORD  ",_text,"\t",_dword,";\n"
  61. filewrite browser "}\n\n"
  62.  
  63. = print info header
  64. filewrite browser "struct tagBITMAPINFOHEADER {\n"
  65. fileread editor _dword
  66. filewrite browser "  DWORD biSize\t\t",_dword,";\n"
  67. fileread editor _dword
  68. filewrite browser "  LONG  biWidth\t",_dword,"\t("
  69. call DECOUT @_dword
  70. filewrite browser ");\n"
  71. fileread editor _dword
  72. filewrite browser "  LONG  biHeight\t",_dword,"\t("
  73. call DECOUT @_dword
  74. filewrite browser ");\n"
  75. fileread editor _word
  76. filewrite browser "  WORD  biPlanes\t",_word,";\n"
  77.  
  78. = get bit per pixel
  79. var bpp word
  80. fileread editor bpp
  81. filewrite browser "  WORD  biBitCount\t",bpp,";\t\t("
  82. call DECOUT @bpp
  83. filewrite browser ");\n"
  84.  
  85. fileread editor _dword
  86. filewrite browser "  DWORD biCompression\t",_dword,";\n"
  87. fileread editor _dword
  88. filewrite browser "  DWORD biSizeImage\t",_dword,";\n"
  89. fileread editor _dword
  90. filewrite browser "  LONG  biXPPerMeter\t",_dword,";\n"
  91. fileread editor _dword
  92. filewrite browser "  LONG  biYPPerMeter\t",_dword,";\n"
  93. fileread editor _dword
  94. filewrite browser "  DWORD biClrUsed\t",_dword,";\n"
  95. fileread editor _dword
  96. filewrite browser "  DWORD biClrImportant\t",_dword,";\n"
  97. filewrite browser "}\n\n"
  98.  
  99. if bpp <= 8
  100.  
  101.   = print color table header
  102.   = calculate number of colors (2 ** bits = 2 << (bits -1))
  103.   bpp =  2 << (bpp - 1)
  104.  
  105.   filewrite browser "Color table ("
  106.   call DECOUTNOCOL @bpp
  107.   filewrite browser " colors):\n"
  108.   filewrite browser "=====================================================\n"
  109.   filewrite browser "\nINDEX\t\tBLUE\tGREEN\tRED\tRES.\n\n"
  110.  
  111.   = print color table
  112.   loop COLOROUT bpp
  113.  
  114. endif
  115. fileclose browser
  116. fileclose editor
  117. end
  118.  
  119. = decimal output
  120. @@DECOUT
  121. number_radix = 10
  122. number_prefix = ''
  123. var _r1 varref
  124. pop _r1
  125. filewrite browser deref(_r1)
  126. number_prefix = '0x'
  127. number_radix = 16
  128. return
  129.  
  130. = decimal output without number marking
  131. @@DECOUTNOCOL
  132. number_radix = 10
  133. number_prefix = ''
  134. pop _r1
  135. filewrite browser text(deref(_r1))
  136. number_prefix = ''
  137. number_radix = 16
  138. return
  139.  
  140. = output a color line
  141. @@COLOROUT
  142. if loop < 100
  143.   filewrite browser ' '
  144.   if loop < 10
  145.     filewrite browser ' '
  146.   endif
  147. endif
  148.  
  149. var l byte
  150. l = loop
  151. call DECOUTNOCOL @l
  152. filewrite browser ")\t\t"
  153. fileread editor l
  154. filewrite browser l, "\t" 
  155. fileread editor l
  156. filewrite browser l, "\t" 
  157. fileread editor l
  158. filewrite browser l, "\t" 
  159. fileread editor l
  160. filewrite browser l, "\n" 
  161. return
  162.  
  163.